import { useUserStore } from "@/pinia";
/**
 * 封装改变检查数据的监听逻辑
 * @param {string} key - 要监听的storage键名
 * @param {Function} callback - 监听到变化时的处理函数，接收newValue和oldValue作为参数
 * @returns {Function} - 用于在组件卸载时调用的清理函数
 */
export function watchStorage(key, callback) {
    const userStore = useUserStore();
    const storageHandler = (e) => {
        // 只处理指定key的变化
        if (e.key === key) {

            // 解析新值，如果新值不存在则尝试从pinia获取
            const newValue = e.newValue ? JSON.parse(e.newValue) : userStore.checkDetailForm

            // 调用传入的处理函数
            callback(e);
        }
    };

    // 注册事件监听
    window.addEventListener("storage", storageHandler);

    // 返回清理函数
    return () => {
        window.removeEventListener("storage", storageHandler);
    };
}

/**
 * 触发storage变化的工具函数
 * @param {any} key -  要监听的storage键名
 */
export function setStorageWithEvent(key = 'change_checkDetailForm', data = {}) {
    const event = new Event("storage");
    event.key = key;
    event.data = data;
    window.dispatchEvent(event);
}